# Contributor: Natanael Copa <ncopa@alpinelinux.org>
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=binutils
pkgver=2.42
pkgrel=0
pkgdesc="Tools necessary to build programs"
url="https://www.gnu.org/software/binutils/"
makedepends_build="bison flex texinfo"
makedepends_host="zlib-dev"
arch="all"
license="GPL-2.0-or-later AND LGPL-2.1-or-later AND BSD-3-Clause"
subpackages="$pkgname-dev $pkgname-doc"
source="https://ftp.gnu.org/gnu/binutils/binutils-$pkgver.tar.xz
	0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch
	binutils-ld-fix-static-linking.patch
	LoongArch-Modify-inconsistent-behavior-of-ld-with-un.patch
	"
builddir="$srcdir/$pkgname-$pkgver"
options="!check"

if [ -z "$BOOTSTRAP" ]; then
	makedepends_host="$makedepends_host jansson-dev zstd-dev"
	_noboot_configure="--enable-jansson --with-zstd"
fi

if [ "$CHOST" = "$CBUILD" ] && [ "$CBUILD" = "$CTARGET" ] && [ "$CTARGET_ARCH" != "riscv64" ] && [ "$CTARGET_ARCH" != "loongarch64" ]; then
	subpackages="$subpackages $pkgname-gold"
fi

if [ "$CHOST" != "$CTARGET" ]; then
	pkgname="$pkgname-$CTARGET_ARCH"
	subpackages=""
	sonameprefix="$pkgname:"
fi

# secfixes:
#   2.40-r10:
#     - CVE-2023-1972
#   2.40-r0:
#     - CVE-2023-1579
#   2.39-r2:
#     - CVE-2022-38533
#   2.39-r0:
#     - CVE-2022-38126
#   2.35.2-r1:
#     - CVE-2021-3487
#   2.32-r0:
#     - CVE-2018-19931
#     - CVE-2018-19932
#     - CVE-2018-20002
#     - CVE-2018-20712
#   2.28-r1:
#     - CVE-2017-7614

build() {
	local _sysroot=/
	local _cross_configure="--enable-install-libiberty --enable-shared"
	local _arch_configure=""
	local _gold_configure="--disable-gold"
	local _plugin_configure="--enable-plugins"

	if [ "$CHOST" != "$CTARGET" ]; then
		_sysroot="$CBUILDROOT"
		_cross_configure="--disable-install-libiberty"
		_plugin_configure="--disable-plugins"
	fi

	if [ "$CHOST" = "$CBUILD" ] && [ "$CBUILD" = "$CTARGET" ] && [ "$CTARGET_ARCH" != "riscv64" ] && [ "$CTARGET_ARCH" != "loongarch64" ]; then
		_gold_configure="--enable-gold"
	fi

	if [ "$CTARGET_ARCH" = "x86_64" ]; then
		_arch_configure="--enable-targets=x86_64-pep"
	fi

	if [ "$CTARGET_ARCH" = "riscv64" ] || [ "$CTARGET_ARCH" = "loongarch64" ]; then
		_gold_configure="--disable-gold"
	fi

	CFLAGS="$CFLAGS -O2" \
	CXXFLAGS="$CXXFLAGS -O2" \
	./configure \
		--build=$CBUILD \
		--host=$CHOST \
		--target=$CTARGET \
		--with-build-sysroot="$CBUILDROOT" \
		--with-sysroot=$_sysroot \
		--prefix=/usr \
		--mandir=/usr/share/man \
		--infodir=/usr/share/info \
		--sysconfdir=/etc \
		$_arch_configure \
		$_cross_configure \
		$_gold_configure \
		$_plugin_configure \
		$_noboot_configure \
		--disable-gdb \
		--disable-gprofng \
		--disable-multilib \
		--disable-nls \
		--disable-werror \
		--enable-64-bit-bfd \
		--enable-colored-disassembly \
		--enable-default-execstack=no \
		--enable-default-hash-style=gnu \
		--enable-deterministic-archives \
		--enable-ld=default \
		--enable-new-dtags \
		--enable-relro \
		--enable-threads \
		--with-bugurl="https://gitlab.alpinelinux.org/alpine/aports/-/issues" \
		--with-mmap \
		--with-pic \
		--with-system-zlib
	make
}

package() {
	make install DESTDIR="$pkgdir"
	if [ -d "$pkgdir"/usr/lib64 ]; then
		mv "$pkgdir"/usr/lib64/* "$pkgdir"/usr/lib/
		rmdir "$pkgdir"/usr/lib64
	fi
	if [ "$CHOST" != "$CTARGET" ]; then
		# creating cross tools: remove any files that would conflict
		# with the native tools, or other cross tools
		rm -r "${pkgdir:?}"/usr/share
		rm -f "$pkgdir"/usr/lib/libiberty.a
		rm -r "${pkgdir:?}"/usr/lib/bfd-plugins
	fi
}

gold() {
	pkgdesc="GNU binutils - gold linker"

	if [ -e "$pkgdir"/usr/bin/ld.gold ]; then
		amove usr/bin/ld.gold
	fi
	amove usr/$CTARGET/bin/ld.gold
}

sha512sums="
155f3ba14cd220102f4f29a4f1e5cfee3c48aa03b74603460d05afb73c70d6657a9d87eee6eb88bf13203fe6f31177a5c9addc04384e956e7da8069c8ecd20a6  binutils-2.42.tar.xz
70ec22bd72ef6dddecfd970613387dd4a8cdc8730dd3cbf03d5a0c3a7c4d839383167bb06dad21bf7c235329fd44b5dc4aefe762f68544f17155cf002bf1be4a  0001-Revert-PR25882-.gnu.attributes-are-not-checked-for-s.patch
ecee33b0e435aa704af1c334e560f201638ff79e199aa11ed78a72f7c9b46f85fbb227af5748e735fd681d1965fcc42ac81b0c8824e540430ce0c706c81e8b49  binutils-ld-fix-static-linking.patch
f901833707dbe38c6519df91f03c51886e7f11aabd0c2dbe869eb6ffedb38201c020a6d34b3fa8aaa7d195349a0dd934709ca41109047348a7f303d2a8bf4f75  LoongArch-Modify-inconsistent-behavior-of-ld-with-un.patch
"
